package financeiro.manager;

import geral.manager.GenericManager;
import geral.manager.UtilManager;
import geral.util.FacesUtil;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import aspecto.annotation.Permissao;
import br.com.sgc.entities.financeiro.FormaPagamento;
import br.com.sgc.permissao.Role;
import br.com.sgc.session.GenericSession;

@Named
@ConversationScoped
public class FormaPagamentoManager extends GenericManager implements Serializable {
	
	private static final long serialVersionUID = 7979723078070199274L;

	@Inject private UtilManager utilManager;
	
	@EJB private GenericSession<FormaPagamento> formaPagamentoSession;
	
	private FormaPagamento formaPagamento = new FormaPagamento();
	
	private List<FormaPagamento> list = new ArrayList<FormaPagamento>();
	
	private Boolean showPanelCadastro;

	@Permissao(role= Role.Sistema_Financeiro_Forma_Pagamento_Listar)
	public String list(){
		list = formaPagamentoSession.findAll(FormaPagamento.class, utilManager.getSegurancaManager().getUsuarioLogado().getClinica().getId());
		showPanelCadastro = false;
		return "formFormaPagamento";
	}
	
	@Permissao(role= Role.Sistema_Financeiro_Forma_Pagamento_Salvar)
	public String prepareSave(){
		showPanelCadastro = true;
		formaPagamento = new FormaPagamento();
		return "formFormaPagamento";
	}
	
	@Permissao(role= Role.Sistema_Financeiro_Forma_Pagamento_Salvar)
	public String save(){
		try {
			formaPagamento.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
			formaPagamentoSession.save(formaPagamento);
			FacesUtil.mensInfo("Forma de Pagamento salva com sucesso");
			formaPagamento = new FormaPagamento();
			return list();
		} catch (Exception e) {
			e.printStackTrace();
			FacesUtil.mensErro(e.getMessage());
			return null;
		}
	}
	
	@Permissao(role= Role.Sistema_Financeiro_Forma_Pagamento_Atualizar)
	public String prepareUpdate(){
		formaPagamento = formaPagamentoSession.findById(FormaPagamento.class, formaPagamento.getId(), true);
		showPanelCadastro = true;
		return "formFormaPagamento";
	}
	
	@Permissao(role= Role.Sistema_Financeiro_Forma_Pagamento_Atualizar)
	public String update(){
		try {
			formaPagamento.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
			formaPagamentoSession.update(formaPagamento);
			formaPagamento = new FormaPagamento();
			FacesUtil.mensInfo("Forma de Pagamento atualizada com sucesso");
			return list();
		} catch (Exception e) {
			FacesUtil.mensErro(e.getMessage());
			return null;
		}
	}

	public GenericSession<FormaPagamento> getFormaPagamentoSession() {
		return formaPagamentoSession;
	}

	public void setFormaPagamentoSession(
			GenericSession<FormaPagamento> formaPagamentoSession) {
		this.formaPagamentoSession = formaPagamentoSession;
	}

	public FormaPagamento getFormaPagamento() {
		return formaPagamento;
	}

	public void setFormaPagamento(FormaPagamento formaPagamento) {
		this.formaPagamento = formaPagamento;
	}

	public List<FormaPagamento> getList() {
		return list;
	}

	public void setList(List<FormaPagamento> list) {
		this.list = list;
	}

	public Boolean getShowPanelCadastro() {
		return showPanelCadastro;
	}

	public void setShowPanelCadastro(Boolean showPanelCadastro) {
		this.showPanelCadastro = showPanelCadastro;
	}
}
